#ifndef TOUCH_H
#define TOUCH_H
#include <Container.h>

#include <fcntl.h>
#include <iostream>
#include <thread>
#include <atomic>
#include <linux/input.h>
using namespace std;

class Touch
{
    int fd = -1;
    static bool isInt;
    thread eventThread;
    atomic<bool> running{false};

    Container *pressedContainer = nullptr;  // 按下时记录的容器
    Container *releasedContainer = nullptr; // 松开时记录的容器
    Container *rootContainer = nullptr;     // 根容器指针

    // 添加长按相关成员变量
    atomic<bool> longPressRunning{false}; // 准确检测是否该结束或运行回调函数
    thread longPressThread;
    Container *longPressContainer = nullptr;

    // 实时位置跟踪
    static atomic<int> currentTouchX;
    static atomic<int> currentTouchY;
    static atomic<bool> isTouching;

    void startLongPress(Container *container);
    void stopLongPress();
    void inputThread(); // 线程函数

public:
    Touch(const char *path = "/dev/input/event0");
    ~Touch();

    // 添加设置根容器的方法
    void setRootContainer(Container *root) { this->rootContainer = root; }

    // 获取实时触摸位置（供回调函数使用）
    static bool getCurrentTouchPosition(int &x, int &y);
    static bool isCurrentlyTouching();
};

#endif